#pragma once
#include<thread>
#include "Common.h"

class ThreadCache
{
public:
	// 申请和释放内存对象
	void* Allocate(size_t size);
	void Deallocate(void* ptr, size_t size);

	// 从中心缓存获取对象
	void* FetchFromCentralCache(size_t index, size_t size);

	// 释放对象时，链表过长时，回收内存回到中心缓存
	void ListTooLong(FreeList& list, size_t size);
    
private:
	FreeList _freeLists[NFREELIST];
};

// // TLS (Thread Local Storage)
// #if defined(_WIN32) || defined(_WIN64)
//     // Windows 使用 __declspec(thread)
//     static __declspec(thread) ThreadCache* pTLSThreadCache = nullptr;
// #else
//     // Linux/macOS 使用 __thread (GCC/Clang) 或 thread_local (C++11)
//     static __thread ThreadCache* pTLSThreadCache = nullptr;
// #endif